package com.ccp.dev.system.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.system.model.SysOrg;
import com.ccp.dev.system.model.SysOrgChildren;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 组织model类
 * @author niudong
 */
@Mapper
public interface SysOrgDao extends IBaseMapper<SysOrg,String> {

    /**
     * 根据组织id查询该组织所属租户的id
     * @param orgId
     * @return 返回查询到的租户id
     */
    String getTenIdByOrgId(String orgId);

    /**
     * 根据租户id查找组织
     * @param tenantId
     * @return 返回查询到的组织信息
     */
    SysOrg getOrgByTenantId(String tenantId);

    /**
     * 根据当前用户id得到组织
     * @param curUserId
     * @return 返回根据用户id查询到的组织信息
     */
    SysOrg getOrgByUserId(String curUserId);

    /**
     * 根据组织id
     * @param orgId
     * @return 返回根据组织id查询到的组织
     */
    List<SysOrg> querySubOrgBySupId(String orgId);

    /**
     * 根据组织id
     * @param orgId
     * @return
     */
    List<SysOrgChildren> querySubOrgBySupIdToTree(String orgId);

    /**
     * 查组织树 平铺list
     * @param queryMap 查询条件
     * @return 非树型list
     */
    List<SysOrg> querySysOrgFlat(Map<String,Object> queryMap);
    /**
     * 同级节点排序
     * @param param where条件map
     */
    void updateSn(Map<String,Object> param);

    /**
     * 根据组织id查询组织是否由子组织
     * @param orgId 组织id
     * @return 返回是否有自组织
     */
    int querySubOrgByOrgId(String orgId);

    /**
     * 根据用户所属组织查询组织树
     * @param orgId 组织id
     * @return 返回用户所属组织树
     */
    List<SysOrg> getByIdForTreeData(String orgId);

    /**
     * 根据用户所属组织查询组织树
     * @param orgId 组织id
     * @return 返回查询到的组织树
     */
    List<SysOrgChildren> getByIdForTreeDataToTree(String orgId);

    /**
     * 取得用户主组织名称
     * @param userId 用户id
     * @return SysOrg组织对象
     */
    SysOrg getPrimaryOrgByUserId(String userId );

    /**
     * 根据path获取组织集合（path由id拼接而成）
     * @param path 选中的组织的path
     * @return 组织集合
     */
    List<SysOrg> queryOrgByPath(String path);

    /**
     * 根据path查询组织集合
     * @param path
     * @return 返回查询到的组织集合
     */
    List<SysOrg> queryOrgsByOrgPath(String path);
    /**
     * 根据path获取子组织集合（path由id拼接而成）
     * @param map orgId 组织id ；pathLike 组织path值+%
     * @return 组织集合
     */
    List<SysOrg> querySubOrgByPath(Map map);

    /**
     * 校验组织名是否已存在
     * @param orgName 组织名称
     * @return 返回组织对象
     */
    SysOrg getByOrgName(String orgName);

    /**
     * 校验组织代码是否已存在
     * @param orgCode 组织代码
     * @return 返回组织对象
     */
    SysOrg getByOrgCode(String orgCode);
    /**
     * 根据角色id获取组织
     * @param roleId 角色id
     * @return 返回组织对象
     */
    SysOrg getOrgByRoleId(String roleId);

    /**
     * 获取组织信息
     * @return 返回组织信息
     */
    List<SysOrg> queryAll();

    /**
     * 根据用户id查询组织信息
     * @param userId
     * @return 返回根据用户id查询到的组织信息
     */
    List<SysOrg> queryOrgsByUserId(String userId);

    /**
     *  根据组织的名称查询组织数据。
     * @param orgName
     * @return 返回根据组织的名称查询到的组织数据
     */
    List<SysOrg> queryByOrgName(String orgName);

    SysOrg getOrgByAccount(String code);
    SysOrg getMainOrgByAccount(String account);

    SysOrg getTenantOrgByTenantId(String tenantId);

    List<SysOrg> queryTenantByOrgName(Map<Object, Object> map);

    List<SysOrg> queryOrgByorgSupId(Map<Object, Object> map);

    List<SysOrg> queryOrgsByOrdIds(@Param("orgIds") List<String> orgIds);

    List<SysOrg> queryTenantOrgByTentanIds(@Param("tenantIds")List<String> tenantIds);

    SysOrg getOrgIdByUserId(String userid);
}
